package com.service;

import com.dao.GoodsDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * 测试事务的隔离级别
 */
@Service
public class GoodsService03 {
    @Autowired
    private GoodsDao goodsDao;

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void buyGoodsByTxIsolation(int user_id,int goods_id,int num){
        //查询到商品价格
        Float goods_price = goodsDao.queryPriceById(goods_id);
        System.out.println("第一次读取的价格："+goods_price);
        // 测试一下隔离级别，在用一个事务中，查询一下价格
        Float goods_price2 = goodsDao.queryPriceById(goods_id);
        System.out.println("第二次读取的价格："+goods_price2);
    }


    /**
     * 测试 READ_COMMITTED 隔离级别情况 一个事务能够读取到另一个事务已提交的数据
     * @param user_id
     * @param goods_id
     * @param num
     */
    @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED)
    public void buyGoodsByTxIsolation2(int user_id,int goods_id,int num){
        //查询到商品价格
        Float goods_price = goodsDao.queryPriceById(goods_id);
        System.out.println("第一次读取的价格："+goods_price);
        // 测试一下隔离级别，在用一个事务中，查询一下价格
        // 在数据库中修改价格，看前后两次读取的价格是否是一致的
        // 结果：两次读取的价格不一致
        Float goods_price2 = goodsDao.queryPriceById(goods_id);
        System.out.println("第二次读取的价格："+goods_price2);
    }
}
